package dletc.Map;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * Map集合：
 * 	1.在java.util.Map
 *  2.双列的
 *  3.Map集合的特点：
 *  	1） 是以键值对形式存储，一个元素包含两个值，key value
 *  	2） key和value的数据类型可以是相同的，也可以不同。
 *  	3）key值不能重复，value值可以重复。
 *  	4）key与value的值是一一对应的关系
 *  4.体系结构：
 *  	HashMap集合：底层结构： 哈希表（数组+链表）  查询快， 无序的集合
 *  	LinkedHashMap集合： 底层结构： 哈希表（数组+链表） + 链表，  有序的集合
 *  	TreeMap
 *  5.常用方法
 *  	1）添加键值对：put()方法
 *  	2）通过key找value  V get(Object key)  
 *  	3）判断是否包含某个key  boolean containsKey(Object key)  
 *  	4）判断是否包含某个value  boolean containsValue(Object value) 
 *  	5）清空集合  void clear()
 *  	6）判断是否为空  boolean isEmpty() 
 *  	7）获得所有的key  Set<K> keySet()  
 *  	8）删除数据  V remove(Object key)  key value都删除
 *  	9）集合长度  int size()  
 *  	10）获得所有的value  Collection<V> values() 
 *  	11) 将集
 *  	第一种：	
	 *  	第一步：需要使用keySet() 方法获取key值，存入Set集合
	 *  	第二步：遍历Set集合获取key值，
	 *  	第三部：调用map集合中的get（k key）方法，获取value值。
	 *  第二种：
	 *  	第一步：需要使用entrySet() 方法获取键值对值，存入Set集合
	 *  	第二步：遍历Set集合，
	 *  	第三部：调用entry中特有的两个方法getKey（） getValue（）方法 获取key和value值
 *
 */
public class Demo01 {
	public static void main(String[] args) {
		
		Map<String,String> map = new HashMap<String,String>();
		/**
		 * V put(K key, V value)  将指定的值与该映射中的指定键相关联
		 * 添加时，集合中没有相同的key，则返回值为null
		 * 添加时，集合中有相同的key，则新的value会替换旧的value，并且返回旧的value
		 */
		map.put("黄晓明", "杨颖");
		map.put("罗晋", "唐嫣");
		map.put("谢霆锋", "王菲");
		String put1 = map.put("冯绍峰", "赵丽颖");
		System.out.println(put1); // null
		String put2 = map.put("冯绍峰", "孙俪");
		System.out.println(put2);
		
		System.out.println(map);
		
		/**
		 * V remove(Object key)  如果存在（key），从该地图中删除一个键的映射。
		 * 返回值： key存在 返回被删除的value值
		 * 		 key不存在，返回值为null
		 */
		
		String remove = map.remove("罗晋");
		System.out.println(remove);
		String remove2 = map.remove("成龙");
		System.out.println(remove2);	
		System.out.println(map);
		
		/**
		 *  V get(K  key): 根据指定的键，获取对应的value   查
		 *     返回值： 如果有key, 返回值为value
		 *             如果没有key, 返回值为null
		 */
		
		String get1 = map.get("黄晓明");
		System.out.println(get1);
		
		String get2 = map.get("李现");
		System.out.println(get2);
		
		/**
		 * boolean containsKey(K key): 判断集合中是否包含指定的键
		 */	
		boolean b1 = map.containsKey("罗晋");
		System.out.println(b1);
		
		/**
		 *  int size(): 获取map集合的长度，元素的个数
		 */
		
		int size = map.size();
		System.out.println(size);
		
		/**
		 * 获得所有的value  Collection<V> values()  
		 */
		Collection<String> values = map.values();
		System.out.println(values);
		
		/**
		 * 是否包含某个key  boolean containsKey(Object key) 
		 */
		boolean containsKey = map.containsValue("唐嫣");
		System.out.println(containsKey);
		/**
		 *  clear() :清空集合中的数据
		 */
		map.clear();
		System.out.println(map);
	}
}
